package com.sdonkey.score.service;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.sdonkey.score.bean.ApplicationNewBean;
import com.sdonkey.score.bean.DeveloperBean;
import com.sdonkey.score.bean.FriendBean;
import com.sdonkey.score.bean.TransferRecordBean;
import com.sdonkey.score.bean.UserBalanceBean;
import com.sdonkey.score.dto.UserExtractDto;
import com.sdonkey.score.dto.UserTowardBalanceDto;

/**
 * 广告积分管理service
 * @author 赵超
 * @email 773134958@qq.com
 */
public interface IAdScoreManagerService {
	/**
	 * 查询用户积分
	 * @param id
	 * @return
	 */
	UserBalanceBean selectUserBalance(@Param("id") String id);

	/**
	 * 按照  日期区间  查询提现记录
	 * @param id
	 * @param startDate
	 * @param endDate
	 * @param intpage
	 * @return
	 */
	Map<String, Object> extractRecordsByDate(String id, String startDate, String endDate, int intpage);

	/**
	 * 查询提现记录详情
	 * @param id
	 */
	UserExtractDto selectExtractDetail(String id);

	/**
	 * 给提现记录添加备注
	 * @param id
	 * @param note
	 * @return
	 */
	int addNote(String id, String note);

	/**
	 * 专项积分查询
	 * @param userid
	 * @return
	 */
	Map<String, Object> selectMyScore(String userid, int page);

	/**
	 * 专项积分产品购买页面
	 * @param developerId
	 * @param intpage
	 * @return
	 */
	Map<String, Object> selectProductions(String developerId, int intpage);

	/**
	 * 单个产品详情页面
	 * @param applicationId
	 * @return
	 */
	UserTowardBalanceDto selectproductionDetail(String applicationId);

	/**
	 * 用户购买产品
	 * @param id 			用户id
	 * @param applicationId 应用id
	 * @param price 		应用价格
	 * @return
	 */
	int buyProduction(String id, String applicationId, Double price);

	/**
	 * 确认向内容商支付
	 * @param userId
	 * @param developerId
	 * @param outBalance 
	 * @param note 
	 * @return
	 */
	int payToDeveloperExecute(String userId, String developerId, String outBalance, String note);

	/**
	 * 验证支付密码是否正确
	 * @param userId
	 * @param payPsw
	 * @return
	 */
	boolean validatePayPsw(String userId, String payPsw);

	/**
	 * 查询朋友列表
	 * @param id
	 * @return
	 */
	Map<String, Object> friendListByID(String id);

	/**
	 * 确认向内容商支付
	 * @param userId
	 * @param friendId
	 * @param outBalance
	 * @param note
	 * @return
	 */
	int payToFriendExecute(String userId, String friendId, String outBalance, String note);

	/**
	 * 查看转账记录
	 * @param userId
	 * @return
	 */
	List<TransferRecordBean> selectTransferRecords(String userId);

	/**
	 * 查询出用户的可用  专项  积分
	 * @param id
	 * @return
	 */
	String select_TowardBalance(String id);

	/**
	 * 积分交易明细（多条件查询）
	 * @param userId
	 * @param page
	 * @param paymentType		支出（收支）类型
	 * @param transferType		交易类型（0:合约广告 1:好友转账 2:应用购买 3:应用充值 4:专项广告）
	 * @param startTime
	 * @param endTime
	 * @return
	 */
	Map<String, Object> selectScoreDetails(String userId, int page, String paymentType, String transferType,
			String startTime, String endTime);

	/**
	 * 确认提现或转入银行卡
	 * @param userId
	 * @param outBalance
	 * @param serviceCost
	 * @param accountId
	 * @return
	 */
	int transOutToBankCardExecute(String userId, String serviceCost, String outBalance, String accountId);

	/**
	 * 查询某个应用的价格
	 * @param applicationId
	 * @return
	 */
	Double selectPriceByAppId(String applicationId);

	/**
	 * 加载内容商的应用列表
	 * @param developerId
	 * @return
	 */
	List<ApplicationNewBean> loadDevApp(String developerId);

	/**
	 * 通过id加载内容商信息
	 * @param id 内容商id
	 * @return 
	 */
	DeveloperBean selectDevInfoById(String id);

	/**
	 * 通过id加载好友信息
	 * @param id 好友的id
	 * @return
	 */
	FriendBean selectFriendInfoById(String id);

	/**
	 * 加载已关注内容商
	 * @param userId
	 * @return
	 */
	List<DeveloperBean> devListByID(String userId);

	/**
	 * 提现失败之后向用户的账户里面增加相应的提现金额
	 * @param userId
	 * @param outBalance
     * @return
     */
	int transferToBankFailed(String userId, String outBalance, String serviceCost);

	/**
	 * 向应用支付	未完成方法
	 * @param userId
	 * @param appId
	 * @param outBalance
	 * @param note
     * @return
     */
	int payToAppExecute(String userId, String appId, String outBalance, String note);

	/**
	 * 按id获取应用对象
	 * @param id
	 * @return
     */
	ApplicationNewBean selectAppInfoByAid(String id);

	/**
	 * 按条件查询应用列表
	 * @param userId	不为空 则 查询到用户已添加的应用  否则查询到所有符合条件的用户（方便复用）
	 * @param condition
	 * @return
     */
	List<ApplicationNewBean> searchAppByCondition(String userId, String condition);

	/**
	 * 查询用户的可用专项积分
	 * @param userId
	 * @param appId
     * @return
     */
	Double getTowardBalanceByAppId(String userId, String appId);

}
